#include "bsp_gpio_output.h"
#include  "bsp_duty_TIM.h"
uint8_t flag1s=0;
volatile uint16_t Turn_On_Time=MAX_TIME;

void Delay_us(volatile uint16_t us)
{
    for(;us!=0;us--)
    {
        ;
    }
}

/**
 *	@brief 输出控制相关的GPIO口配置函数
 *	@param  无
 *	@retval 无
 */
 void OUTPUT_GPIO_Config(void)
{
    GPIO_InitTypeDef	GPIO_InitStruct;

    /**先开启GPIO的时钟*/
    A_GPIO_APBxClkCmd(A_GPIO_CLK,ENABLE);   //开启GPIO的时钟
    B_GPIO_APBxClkCmd(B_GPIO_CLK,ENABLE);   //开启GPIO的时钟
    C_GPIO_APBxClkCmd(C_GPIO_CLK,ENABLE);   //开启GPIO的时钟


    //A   OUTPUT
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;          //Tx管脚
    GPIO_InitStruct.GPIO_Pin=A_GPIO_PIN;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_Level_3;
    GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;   
    GPIO_Init(A_GPIO_PORT,&GPIO_InitStruct);

    //B   OUTPUT
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;          //Tx管脚
    GPIO_InitStruct.GPIO_Pin=B_GPIO_PIN;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_Level_3;
    GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;   
    GPIO_Init(B_GPIO_PORT,&GPIO_InitStruct);

    //C   OUTPUT
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;          //Tx管脚
    GPIO_InitStruct.GPIO_Pin=C_GPIO_PIN;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_Level_3;
    GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;   
    GPIO_Init(C_GPIO_PORT,&GPIO_InitStruct);
    A_OUTPUT(1);
    B_OUTPUT(1);
    C_OUTPUT(1);
}

/**
 *	@brief 根据传来的信号周期，和信号低电平时间，计算出具体的导通时间
 *	@param 
 *		@arg period :信号周期
 *		@arg duty :信号占空比
 *	@retval 无
 */
void OUTPUT_Control(volatile uint32_t period,volatile uint32_t duty)
{
    static uint32_t duty_buf=0; //占空比备份                

    if(duty_buf!=duty)
    {
        duty_buf=duty;   //更新高电平时间值143   8169
        //8191
        Turn_On_Time=MAX_TIME-duty*MAX_TIME/period;   
    }
    if(flag1s==1)
    {
        flag1s=0;
        if(cnt>0)
        {
            cnt--;
        }
        else if(Read_PA8_Pin()==1)     //PWM输入捕获中断停止有两种情况  1.信号线被拔了  2.全功率输出(占空比100%)
        {   //这里主要针对情况1 此时单片机的PA8脚点平为高
            Turn_On_Time=MAX_TIME;
        }
        else if(Read_PA8_Pin()==0)     //PWM输入捕获中断停止有两种情况  1.信号线被拔了  2.全功率输出(占空比100%)
        {   //这里主要针对情况1 此时单片机的PA8脚点平为高
            Turn_On_Time=0;
        }
    }
    if(Turn_On_Time==0)
    {
        Turn_On_Time=1;
    } 
}